/**
 * 
 */
package mx.frantor.catalogos.daoimp;

import java.util.List;
import java.util.StringTokenizer;

import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import flex.messaging.io.ArrayCollection;

import mx.frantor.catalogos.dao.OrdendeProduccionProductosDAO;
import mx.frantor.catalogos.entitys.CatalogoProductoEntity;
import mx.frantor.catalogos.entitys.OrdendeProduccionProductosEntity;
import mx.frantor.catalogos.entitys.OrdendecompramateriaprimaEntity;
import mx.frantor.catalogos.entitys.ProductosExistenciasEntity;
import mx.frantor.util.HibernateUtil;

/**
 * @author Hp
 *
 */
public class OrdendeProduccionProductosDAOImp implements
		OrdendeProduccionProductosDAO {

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.OrdendeProduccionProductosDAO#agregarOrdenPP(mx.frantor.catalogos.entitys.OrdendeProduccionProductosEntity)
	 */
	@Override
	public String agregarOrdenPP(OrdendeProduccionProductosEntity nuevoOrdenPP) {
		// TODO Auto-generated method stub
				String e = "";
				Session session = HibernateUtil.getSessionFactory()
						.getCurrentSession();
				
				session.beginTransaction();
				try {
				session.save(nuevoOrdenPP);
				session.flush();
				session.getTransaction().commit();
				e = nuevoOrdenPP.getClaveProducto().toString();
				HibernateUtil.getSessionFactory().getCurrentSession().close();
				} catch (Exception x) {
					//e.printStackTrace();
					session.getTransaction().rollback();
					e = x.getMessage();
					//return e.toString();
				}
				HibernateUtil.getSessionFactory().getCurrentSession().close();
				System.out.println("agregar orden de prod - prod resultado " + e);

				return e;
	}

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.OrdendeProduccionProductosDAO#modificaOrdenPP(mx.frantor.catalogos.entitys.OrdendeProduccionProductosEntity)
	 */
	@Override
	public String modificaOrdenPP(
			OrdendeProduccionProductosEntity modificarOrdenPP) {
		// TODO Auto-generated method stub
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
	
		session.beginTransaction();
		try {
			OrdendeProduccionProductosEntity ordenPPTemp = (OrdendeProduccionProductosEntity) session.get(
					OrdendeProduccionProductosEntity.class, modificarOrdenPP.getClaveProducto());
		session.flush();
		session.evict(ordenPPTemp);
		session.update(modificarOrdenPP);
		session.getTransaction().commit();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		HibernateUtil.getSessionFactory().getCurrentSession().close();

		System.out.println("modificar orden de prod - prod resultado " + e);

		return e;
	}

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.OrdendeProduccionProductosDAO#eliminarOrdenpP(long)
	 */
	@Override
	public String eliminarOrdenpP(long claveproducto) {
		String e = "";
		Session session = HibernateUtil.getSessionFactory()
				.getCurrentSession();
		

			// TODO Auto-generated method stub			
			session.beginTransaction();
			try {
				OrdendeProduccionProductosEntity ordenPPElimina = (OrdendeProduccionProductosEntity) session.get(
						OrdendeProduccionProductosEntity.class, claveproducto);
			session.delete(ordenPPElimina);
			session.getTransaction().commit();
		} catch (Exception x) {
			//e.printStackTrace();
			session.getTransaction().rollback();
			e = x.getMessage();
			//return e.toString();
		}
		//HibernateUtil.getSessionFactory().getCurrentSession().close();
			System.out.println("eliminar orden de prod - prod resultado " + e);

		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return e;
	}

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.OrdendeProduccionProductosDAO#getTodosOrdenPPctivos()
	 */
	@SuppressWarnings("unchecked")
	@Override
	public List<OrdendeProduccionProductosEntity> getTodosOrdenPPctivos() {
		// TODO Auto-generated method stub
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<OrdendeProduccionProductosEntity> ordenmatp = session.createCriteria(OrdendeProduccionProductosEntity.class)
				.addOrder(Order.asc("ClaveProducto")).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return ordenmatp;
	}

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.OrdendeProduccionProductosDAO#getOrdenPPId(long)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public OrdendeProduccionProductosEntity getOrdenPPId(long claveproducto) {
		// TODO Auto-generated method stub
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<OrdendeProduccionProductosEntity> ordencmp = (List<OrdendeProduccionProductosEntity>) session.createCriteria(OrdendeProduccionProductosEntity.class)
				.add(Restrictions.eq("ClaveProducto", claveproducto))
				.setFetchSize(1).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		if(ordencmp==null){
			return null;
		}else{
			return ordencmp.get(0);
		}	
	}

	/* (non-Javadoc)
	 * @see mx.frantor.catalogos.dao.OrdendeProduccionProductosDAO#getOrdenPPorId(long)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public List<OrdendeProduccionProductosEntity> getOrdenPPorId(
			long claveproducto) {
		// TODO Auto-generated method stub
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<OrdendeProduccionProductosEntity> ordencmp = (List<OrdendeProduccionProductosEntity>) session.createCriteria(OrdendeProduccionProductosEntity.class)
				.add(Restrictions.eq("ClaveProducto", claveproducto))
				.list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return ordencmp;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<OrdendeProduccionProductosEntity> getOrdenPPorIdPedido(
			long idPedido) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		List<OrdendeProduccionProductosEntity> remanuf = session.createCriteria(OrdendeProduccionProductosEntity.class)
				.add(Restrictions.eq("IdPedido", idPedido)).list();
		HibernateUtil.getSessionFactory().getCurrentSession().close();
		return remanuf;
	}

}
